/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.edu.itschapala.ssrp.ln;

import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import mx.edu.itschapala.ssrp.dao.AsignacionAsesorDAO;
import mx.edu.itschapala.ssrp.dao.CronogramaDAO;
import mx.edu.itschapala.ssrp.dao.EmpresaDAO;
import mx.edu.itschapala.ssrp.dao.IntegranteResidenciaDAO;
import mx.edu.itschapala.ssrp.dao.PersonalDAO;
import mx.edu.itschapala.ssrp.dao.ProyectoDAO;
import mx.edu.itschapala.ssrp.dao.UsuarioDAO;
import mx.edu.itschapala.ssrp.modelo.Cronograma;
import mx.edu.itschapala.ssrp.modelo.Empresa;
import mx.edu.itschapala.ssrp.modelo.Proyecto;
import mx.edu.itschapala.ssrp.modelo.Usuario;
import mx.edu.itschapala.ssrp.modelo.AsignacionAsesor;
import mx.edu.itschapala.ssrp.modelo.IntegranteResidencia;
import mx.edu.itschapala.ssrp.modelo.Personal;

/**
 *
 * @author pocholomacbook
 */
@Stateless
@LocalBean
public class CatalogoLN {

    @EJB
    private PersonalDAO personalDAO;

    @EJB
    private IntegranteResidenciaDAO integranteResidenciaDAO;
    @EJB
    private AsignacionAsesorDAO asignacionAsesorDAO;
    @EJB
    private UsuarioDAO usuarioDAO;
    @EJB
    private ProyectoDAO proyectoDAO;
    @EJB
    private EmpresaDAO empresaDAO;
    @EJB
    private CronogramaDAO cronogramaDAO;

    //Empresa
    public List<Empresa> getEmpresas() {
        return empresaDAO.findAll();
    }

    public void crearEmpresa(Empresa empresa) {
        empresaDAO.create(empresa);
    }

    public void editarEmpresa(Empresa empresa) {
        empresaDAO.edit(empresa);
    }

    public void removerEmpresa(Empresa empresa) {
        empresaDAO.remove(empresa);
    }

    public Empresa getEempresaPorID(int empresa) {
        return empresaDAO.find(empresa);
    }
    
    public Empresa getEmpresa(Empresa empresa) {
        return empresaDAO.actualizar(empresa);
    }
    

    //Proyecto
    public List<Proyecto> getProyectos() {
        return proyectoDAO.findAll();
    }

    public void crearProyecto(Proyecto proyecto) {
        proyectoDAO.create(proyecto);
    }

    public void editarProyecto(Proyecto proyecto) {
        proyectoDAO.edit(proyecto);
    }

    public void removerProyecto(Proyecto proyecto) {
        proyectoDAO.remove(proyecto);
    }

    public Proyecto getProyectoPorID(int proyecto) {
        return proyectoDAO.find(proyecto);
    }

    public List<Proyecto> getBancoProyectos() {
        List<Proyecto> lis = new ArrayList<>();
        for (Proyecto proyecto : getProyectos()) {
            if ((proyecto.getStatus() == 'p' || proyecto.getStatus() == 'a') && proyecto.getNumeroIntegrantes() > integranteResidenciaDAO.getPorProyecto(proyecto).size()) {
                lis.add(proyecto);
            }
        }
        return lis;
    }
    
    public List<IntegranteResidencia> getIntegrantesPorProyecto(Proyecto p){
        return integranteResidenciaDAO.getPorProyecto(p);
    }

   /* public List<Proyecto> seleccionBanco() {
        List<Proyecto> lis = new ArrayList<>();
        for (Proyecto p : getProyectos()) {
            if (p.getSeleccion().equals("banco")) {
                lis.add(p);
            }
        }
        return lis;
    }*/

    public List<Proyecto> getProyectoSinAsesor() {
        List<Proyecto> proyectos = new ArrayList<>();
        for (Proyecto p : getProyectoPorStatus('r')) {
            if (asignacionAsesorDAO.getAsesorPorProyecto(p) == null) {
                proyectos.add(p);
            }
        }
        return proyectos;
    }

    public List<Proyecto> getProyectoPorStatus(char status) {
        return proyectoDAO.getPorStatus(status);
    }

    public void actualizarProyecto(Proyecto proyecto) {
        proyectoDAO.edit(proyecto);
    }

    public Proyecto buscarProyecto(Proyecto p) {
        return proyectoDAO.getPorProyecto(p);
    }

    public List<IntegranteResidencia> getPorProyecto(Proyecto p) {
        return integranteResidenciaDAO.getPorProyecto(p);
    }

    public Proyecto getProyectoPorAlumno(String ncontrol) {
        Proyecto proyecto;
        try {
            proyecto = integranteResidenciaDAO.getPorNcontrol(ncontrol).getProyecto();
        } catch (Exception e) {
            proyecto = new Proyecto();
        }
        return proyecto;
    }

    public void asignarProyecto(Usuario logueado, Proyecto proyecto) {
        IntegranteResidencia ir = new IntegranteResidencia();
        ir.setAlumno(logueado.getNcontrol());
        ir.setProyecto(proyecto);
        integranteResidenciaDAO.create(ir);
    }

    //cronograma
    public List<Cronograma> getCronogramas() {
        return cronogramaDAO.findAll();
    }

    public void crearCronograma(Cronograma cronograma) {
        cronogramaDAO.create(cronograma);
    }

    public void editarCronograma(Cronograma cronograma) {
        cronogramaDAO.edit(cronograma);
    }

    public void removerCronograma(Cronograma cronograma) {
        cronogramaDAO.remove(cronograma);
    }

    public List<Cronograma> getCronogramasPorProyecto(Proyecto proyecto) {
        return cronogramaDAO.getPorIdProyecto(proyecto);
    }

    public Cronograma getCronograma(Cronograma c) {
        return cronogramaDAO.getCronograma(c);
    }

    //usuario
    public List<Usuario> getUsuarios() {
        return usuarioDAO.findAll();
    }

    public void crearUsuario(Usuario usuario) {
        usuarioDAO.create(usuario);
    }

    public void editarUsuario(Usuario usuario) {
        usuarioDAO.edit(usuario);
    }

    public void removerUsuario(Usuario usuario) {
        usuarioDAO.remove(usuario);
    }

    public Usuario getUsuarioPorID(String usuario) {
        return usuarioDAO.getPorNcontrol(usuario);
    }

    public List<Usuario> getUsuarioPorTipo(String tipo) {
        return usuarioDAO.getPorTipo(tipo);
    }

//     public AsignacionAsesor getAsignacionAsesorPorId(int asesorInternoID) {
//        return asignacionAsesorDAO.getAsesorPorID(asesorInternoID);
//    }
    public void asignarAsesor(AsignacionAsesor asesor) {
        asignacionAsesorDAO.create(asesor);
    }
    public List<AsignacionAsesor> getAsesoresPorProyecto(Proyecto p){
        return asignacionAsesorDAO.getAsesorPorProyecto(p);
    }
    public void crearIntegranteResidencia(IntegranteResidencia i) {
        integranteResidenciaDAO.create(i);
    }

    public List<AsignacionAsesor> getProyectosAsesorPorID(String id) {
        return asignacionAsesorDAO.getProyectosAsesorPorID(id);
    }

    
    //datos personales 

    public List<Personal> getPersonales() {
        return personalDAO.findAll();
    }

    public void crearPersonal(Personal personal) {
        personalDAO.create(personal);
    }

    public void editarPersonal(Personal personal) {
        personalDAO.edit(personal);
    }

    public void removerPersonal(Personal personal) {
        personalDAO.remove(personal);
    }
    public void removerIntegrantesDeProyecto(List<IntegranteResidencia> ints){
         for(IntegranteResidencia i: ints){
             integranteResidenciaDAO.remove(i);
         }
     }
    public void removerIntegranteResidencia(IntegranteResidencia i){
        integranteResidenciaDAO.remove(i);
    }
    public IntegranteResidencia getIntegranteResidenciaPorAlumno(String alumno){
        return integranteResidenciaDAO.getPorNcontrol(alumno);
    
    }
    
    public void removerAsesorsDeProyecto(List<AsignacionAsesor> as){
        for(AsignacionAsesor a:as){
            asignacionAsesorDAO.remove(a);
        }
        
    }
    
    public List<Proyecto> getProyectoPorEmpresa(Empresa e){
        return proyectoDAO.getPorEmpresa(e);
    }
}
